{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2.1 标量，向量，矩阵，张量"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "线性代数的内容主要关于这四种对象："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 标量"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "标量表示单独的一个数，通常用斜体小写字母表示，如 $s\\in \\mathbb R, n \\in \\mathbb N$。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 向量"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "向量是一个一维数组，这些数字有一定的顺序，可以通过下标获取对应的值，通常用粗体小写字母表示：$\\mathbf{x} \\in \\mathbb R^n$，表示元素取实数，且有 $n$ 个元素，它的元素用对应的斜体小写字母加下标表示：$x_1$。一般我们将向量写成列向量的形式：\n",
    "\n",
    "$$\n",
    "\\mathbf x = \\begin{bmatrix}\n",
    "x_1 \\\\\n",
    "x_2 \\\\\n",
    "\\cdots \\\\\n",
    "x_n\n",
    "\\end{bmatrix}\n",
    "$$\n",
    "\n",
    "有时候我们需要得到一个向量的子集，例如得到第 $1,3,6$ 个元素，那么我们可以令集合 $S = \\{1,3,6\\}$，然后用 $\\mathbf x_{S}$ 来表示这个子集。\n",
    "\n",
    "另外，我们用 $-$ 的下标表示去集合的补：$\\mathbf x_{-1}$ 表示除了 $x_1$ 之外 $\\mathbf x$ 中的所有元素，$\\mathbf x_{-S}$ 表示除了 $x_1, x_3, x_6$ 之外 $\\mathbf x$ 中的所有元素。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 矩阵"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "矩阵是一个二维数组，每个元素的下标有两个，通常用大写粗体字母表示：$\\mathbf A \\in \\mathbb R^{m\\times n}$ 表示取实值的 $m$ 行 $n$ 列矩阵，其元素用对应的小写斜体字母加下标表示：$A_{1,1}, A_{m,n}$。\n",
    "\n",
    "另外，我们用 $:$ 下标表示矩阵的一行或者一列：$\\mathbf A_{i,:}$ 第 $i$ 行，$\\mathbf A_{:,j}$ 第 $j$ 列。\n",
    "\n",
    "矩阵可以写成这样的形式：\n",
    "\n",
    "$$\n",
    "\\begin{bmatrix}\n",
    "A_{1,1} & A_{1,2} \\\\\n",
    "A_{2,1} & A_{2,2} \\\\\n",
    "\\end{bmatrix}\n",
    "$$\n",
    "\n",
    "有时候我们需要对矩阵进行逐元素操作，例如将函数 $f$ 应用到 $\\bf A$ 的所有元素上，此时我们用 $f({\\bf A})_{i,j}$ 表示。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 张量"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "张量是超过二维的数组，我们用 $\\sf A$ 表示张量，${\\sf A}_{i,j,k}$ 表示其元素（三维张量情况下）。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 矩阵转置"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "矩阵的转置操作相当于沿着对角线翻转，定义为：\n",
    "\n",
    "$$\n",
    "\\mathbf A^\\top_{i,j} = \\mathbf A_{i,j}\n",
    "$$\n",
    "\n",
    "矩阵转置的转置等于矩阵本身：\n",
    "\n",
    "$$\\bf \\left(A^\\top\\right)^\\top=A$$\n",
    "\n",
    "转置将矩阵的形状从 $m\\times n$ 变成了 $n \\times m$。\n",
    "\n",
    "向量可以看成是只有一列的矩阵，因此也可以进行转置操作，有时候为了方便，我们可以使用行向量加转置的操作，如：$\\mathbf x=[x_1,x_2,x_3]^\\top$\n",
    "\n",
    "标量也可以看出是一行一列的矩阵，其转置等于自己：$a^\\top=a$。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### 矩阵加法和数乘"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "加法即逐元素相加，要求两个矩阵的形状一样：\n",
    "\n",
    "$$\n",
    "\\mathbf{C = A+B}, C_{i,j}=A_{i,j}+B_{i,j}\n",
    "$$\n",
    "\n",
    "数乘即一个标量与矩阵相乘：\n",
    "\n",
    "$$\n",
    "\\mathbf D = a \\cdot \\mathbf B + c, D_{i,j}=a \\cdot B_{i,j}+c\n",
    "$$\n",
    "\n",
    "有时候我们允许使用一个矩阵和向量相加的形式，得到一个矩阵，把 $\\bf b$ 加到了 $C$ 的每一行上，本质上是构造了一个将 $\\bf b$ 按行复制的一个新矩阵，这种机制叫做 `broadcasting`：\n",
    "\n",
    "$$\n",
    "\\mathbf {C = A + b}, C_{i,j} = A_{i,j} + b_{j}\n",
    "$$"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
